package com.huzz.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.huzz.entity.SysMenu;
import com.huzz.entity.SysPermission;
import com.huzz.entity.SysRole;
import com.huzz.model.RoleModel;
import com.huzz.util.body.DataBox;

import java.util.List;

/**
 * @Name 名称
 * @Description 描述
 * @Author 童年的纸飞机
 * @Since 2023-04-2023/4/27 11:11
 */
public interface ISysRoleService extends IService<SysRole> {


    /**
     * 新建角色
     * @param roleModel
     * @return
     */
    DataBox<String> createRole(RoleModel roleModel);

    /**
     * 查询角色分页列表
     * @param pageNum
     * @param pageSize
     * @param model
     * @return
     */
    IPage<SysRole> findRoleListPage(Integer pageNum, Integer pageSize, RoleModel model);

    /**
     * 编辑角色
     * @param role
     * @return
     */
    DataBox<String> updateRoleById(SysRole role);

    /**
     * 删除角色
     * @param id
     * @return
     */
    DataBox<String> removeRoleById(Integer id);

    /**
     * 根据userId查询角色列表
     * @param userId
     * @return
     */
    List<SysRole> findRoleListByUserId(Integer userId);

    /**
     * 根据roleId查询权限列表
     * @param roleId
     * @return
     */
    List<SysPermission> findPermissionListByRoleId(Integer roleId);

    /**
     * 根据roleId查询菜单列表
     * @param roleId
     * @return
     */
    List<SysMenu> findMenuListByRoleId(Integer roleId);

    /**
     * 给角色分配权限
     * @param roleId
     * @param permissionIdList
     * @return
     */
    DataBox<String> distributePermission(Integer roleId, List<Integer> permissionIdList);

    /**
     * 给角色分配菜单
     * @param roleId
     * @param menuIdList
     * @return
     */
    DataBox<String> distributeMenu(Integer roleId, List<Integer> menuIdList);

    /**
     * 查询绑定到该角色的权限id数组
     * @param roleId
     * @return
     */
    Integer[] findPermissionIdListBeSelected(Integer roleId);

    /**
     * 查询绑定到该角色的菜单id数组
     * @param roleId
     * @return
     */
    Integer[] findMenuIdListBeSelected(Integer roleId);

}
